package util.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

//http://www.myjavazone.com/2013/09/uso-de-sqlite-en-aplicaciones-java.html
public class ConexionSQLite {
    
    //Connection con;
    //Statement stmt = null;
    
    public static Connection getConexion(String ruta) throws ClassNotFoundException, SQLException {
        Class.forName("org.sqlite.JDBC");
        Connection con = null;        
        con = DriverManager.getConnection("jdbc:sqlite:"+ruta);//ejemplo: jdbc:sqlite:c:/temp/mibd.db  jdbc:sqlite:mibd.db (local)        
        // System.out.println("abriendo conexion");
        return con;//autocommit true por defecto
    }            
    
    public static Connection getConexion(String ruta, boolean autocommit) throws ClassNotFoundException, SQLException {  
        Connection con = ConexionSQLite.getConexion(ruta);
        con.setAutoCommit(autocommit);//false: la llamada al commit sera manual
        return con;
    }
    
    /*
    public ConexionSQLite(String ruta) throws Exception  {
        con = getConexion(ruta); 
    }

    //llamado por el garbage collector
    @Override
    protected void finalize() throws Throwable {      
        super.finalize();         
        if(con!=null) {            
            con.close();
        }
    } 
    */
    
    public static void main(String args[]) {
        try {        
            //ConexionSQLite con = new ConexionSQLite();
            //Connection con = ConexionSQLite.getConexion("c:/temp/test.db");
            Connection con = ConexionSQLite.getConexion("test.db");
            Statement st = con.createStatement();
            
            String sql = null;
            
            sql = "drop table if exists prueba";
            st.executeUpdate(sql);//no retorna ResultSet
            
            sql = "CREATE TABLE IF NOT EXISTS prueba ( P1, P2)";
            st.executeUpdate(sql);//no retorna ResultSet
            
            sql = "INSERT INTO prueba (P1,P2) VALUES (1,2);"            
            +"INSERT INTO prueba (P1,P2) VALUES ('a','b');"
            +"INSERT INTO prueba (P1,P2) VALUES (1,'b');"
            +"INSERT INTO prueba (P1,P2) VALUES ('a',2);";
            st.executeUpdate(sql);//no retorna ResultSet
            
            sql = "SELECT * FROM prueba";
            ResultSet rs = st.executeQuery(sql);
            
            while(rs.next()) {
                System.out.println("prueba: P1="+rs.getString("P1")+"&P2="+rs.getString("P2"));
            }
            
            st.close();
            
            con.commit();//Hace efectivo los cambios realizados en la BD 
            
            con.close();
        } catch (Exception ex) {
            //Logger.getLogger(ConexionSQLite.class.getName()).log(Level.SEVERE, null, ex);
            ex.printStackTrace();
        }
    }
}
